Preventing execution of unauthorized software on a computing system is an essential part of system security. Currently, most computing systems rely on the operating system and basic cryptographic primitives to provide security features that ensure data, program, and execution flow authenticity and integrity. Unfortunately, the complexity of modem operating systems and the fact that an adversary oftentimes needs only a single unprotected entry point to gain control over a system, have made malicious code into a common security problem on all systems that allow incoming traffic from distrusted sources (such as the Internet).
A key problem in such systems is that although a program at the beginning of execution may be verified as authentic, while running its execution flow can be redirected to externally inject malicious code using, for example, a buffer overflow (also referred to as a buffer overrun) exploit. Once the adversary executes injected code in the highest trust-priority mode of the system, usually all system resources are at his or her disposal. In that case, the possibility for malicious actions is fairly broad, such as: destruction (e.g., disk formatting, deleting files), replication (e.g., Internet worms), network traffic analysis (e.g., packet sniffing), covert communication (e.g., Trojan horses), and so forth. The ease with which attacks that focus on redirecting program execution as well as their effectiveness have established such attacks as a common threat to system security.
Thus, it would be beneficial to provide a way to improve computer system security.